///**
// * Definition for a Node.
// * struct Node {
// *     int val;
// *     struct Node *next;
// *     struct Node *random;
// * };
// */
//
//struct Node* copyRandomList(struct Node* head) {
//    struct Node* newhead = (struct Node*)malloc(sizeof(struct Node));
//    if (head == NULL)
//    {
//        return NULL;
//    }
//    struct Node* cur1 = head;
//    struct Node* cur2 = newhead;
//    cur2->val = cur1->val;
//    cur1 = cur1->next;
//    while (cur1 && cur2)
//    {
//        struct Node* tmp = (struct Node*)malloc(sizeof(struct Node));
//        cur2->next = tmp;
//        tmp->val = cur1->val;
//        cur1 = cur1->next;
//        cur2 = cur2->next;
//    }
//    cur2->next = NULL;
//    cur2 = newhead;
//    cur1 = head;
//    while (cur1 && cur2)
//    {
//        if (cur1->random == NULL)
//        {
//            cur2->random = NULL;
//        }
//        else
//        {
//            struct Node* cur3 = newhead;
//            struct Node* cur4 = head;
//            while (cur3 && cur4)
//            {
//                if (cur1->random == cur4)
//                {
//                    cur2->random = cur3;
//                }
//                cur3 = cur3->next;
//                cur4 = cur4->next;
//            }
//        }
//        cur1 = cur1->next;
//        cur2 = cur2->next;
//    }
//    return newhead;
//}